import 'entity/Child.dart';
import 'entity/Person.dart';

/*
Dart中的对象操作符：
  ?       条件运算符
  as      类型转换
  is      类型判断
  ..      级联操作（连缀）
 */
void main() {
  print("普通构造函数");
  Person person = new Person.all("tx", 123, 111, 222, "asfasf");
  person.printPerson();
  print(person.area);
  print(person.name);

  print("带set修饰符的方法，调用时就像修改属性一样");
  person.heightValue = 100;
  print(person.height);

  print("调用有初始化列表的构造函数");
  Person defaultPerson = Person.defaultPerson();
  defaultPerson.printPerson();

  print("条件运算符测试");
  // 声明一个对象p1，它可以是null
  Person? p1;
  // 当p1未定义或者为null时，不执行后面的方法
  p1?.printPerson();

  p1 = null;
  p1?.printPerson();

  p1 = Person.defaultPerson();
  if (p1 is Person) {
    (p1 as Person).printPerson();
  }
  if (p1 is String) {
    print("p1 as String: " + (p1 as String));
  }

  print("..级联操作");
  p1
    ..name = "tx"
    ..age = 18
    ..printPerson();

  print("继承");
  Child child = new Child.all("张飞", 100, 232, 30000, "1234", "阉人在此，尔等寿司");
  child.bark();
}
